package Window;
/*
 * Az oszcilloszkóp és a jelgenerátor kijelzőjének megvalósítása 
 */
import java.awt.*;
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class GraphicalValueDisplayer extends JPanel {
	//A megjelenítendő értékek tömbjét tartalmazza.
	protected int[] valueToDisplay; 

	//Konstruktor, amely létrehozza a megjelenítendő panelt.
	public GraphicalValueDisplayer(int[] values){
			valueToDisplay=values;
			int width=480;
			if(values.length>5){width=values.length*80+80;}
		    this.setPreferredSize(new Dimension(width, 300));
//			this.setMinimumSize(new Dimension(width,300));
//			this.setMaximumSize(new Dimension(width,300));
			this.setBorder(BorderFactory.createLineBorder (Color.green, 2));
		    this.setBackground(Color.black);
		    this.setVisible(true);
		  }
	
	//diagram rajzolása logikai értékekből
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.setColor(Color.green);
		for(int i=0;i<valueToDisplay.length;i++){
			//ha az előző állapot más logikai szint volt vagy 1-essel indul a jel,akkor átvezető vonal kell
			if((i!=0 && (valueToDisplay[i-1]!=valueToDisplay[i]))||(i==0 && valueToDisplay[i]==1)){
				g.fillOval(i*80+35, 145, 10, 10);
				g.drawLine(i*80+40, 150, i*80+40, 250);
				g.fillOval(i*80+35, 245, 10, 10);
			}
			//ha a logikai szint 0,akkor a vonal lent van
			if(valueToDisplay[i]==0){
				g.fillOval(i*80+35, 245, 10, 10);
				g.drawLine(i*80+40,250,(i+1)*80+40,250);
				g.fillOval((i+1)*80+35, 245, 10, 10);
			}
			//ha egy akkor fent
			else{
				g.fillOval(i*80+35, 145, 10, 10);
				g.drawLine(i*80+40,150 ,(i+1)*80+40,150);
				g.fillOval((i+1)*80+35, 145, 10, 10);
			}
			
		}
	}
	
	/*
	 * @param valueToDisplay the valueToDisplay to set
	 */
	public void setValueToDisplay(int[] valueToDisplay) {
		this.valueToDisplay = valueToDisplay;
	}

	
	//Visszaadja az adott példány referenciáját.
	public GraphicalValueDisplayer getValue(){
		return this;
	} 

}
